#include "lvgl/lvgl.h"
#include "lvgl/demos/lv_demos.h"
#include "lv_drivers/display/fbdev.h"
#include "lv_drivers/indev/evdev.h"
#include <unistd.h>
#include <pthread.h>
#include <time.h>
#include <sys/time.h>

#include <stdio.h>
#include <string.h>                       // 用于字符串操作函数
#include "lv_font_source_han_sans_bold.h" // 中文支持

/* 全局变量声明 */
static lv_obj_t * kb;           // 虚拟键盘对象指针
static char account[20]  = {0}; // 存储当前输入的账号
static char password[20] = {0}; // 存储当前输入的密码
static lv_obj_t * login_btn;    // 登录按钮
static lv_obj_t * register_btn; // 注册按钮
static lv_obj_t * tip_label;    // 提示信息标签

// 新增：用户数据库（模拟存储注册信息）
#define MAX_USERS 10 // 最大用户数
typedef struct
{
    char account[20];
    char password[20];
} User;
static User user_db[MAX_USERS] = {0}; // 存储用户的数组
static int user_count          = 0;   // 已注册用户数量

/**
 * 新增：检查账号是否已注册
 * 返回值：1=已注册，0=未注册
 */
static int is_account_registered(const char * acc)
{
    for(int i = 0; i < user_count; i++) {
        if(strcmp(user_db[i].account, acc) == 0) {
            return 1;
        }
    }
    return 0;
}

/**
 * 新增：验证账号密码是否匹配（登录核心逻辑）
 * 返回值：1=匹配，0=不匹配
 */
static int verify_login(const char * acc, const char * pwd)
{
    for(int i = 0; i < user_count; i++) {
        if(strcmp(user_db[i].account, acc) == 0 && strcmp(user_db[i].password, pwd) == 0) {
            return 1;
        }
    }
    return 0;
}

/**
 * 新增：跳转至主页面（登录成功后）
 */
static void go_to_main_page(void)
{
    // 1. 销毁当前登录界面所有元素（包括键盘）
    lv_obj_clean(lv_scr_act()); // 清空当前屏幕
    if(kb != NULL) {
        lv_obj_del(kb); // 销毁键盘
        kb = NULL;
    }

    // 2. 创建主页面内容
    lv_obj_t * main_label = lv_label_create(lv_scr_act());
    lv_label_set_text(main_label, "登录成功！欢迎来到主页面");
    lv_obj_set_style_text_font(main_label, &chinese_ziku, 0);
    lv_obj_align(main_label, LV_ALIGN_CENTER, 0, 0);

    // 可添加主页面其他元素（如功能按钮、菜单等）
}

/**
 * 文本框事件回调（输入处理）
 */
static void ta_event_cb(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t * ta        = lv_event_get_target(e);
    char * user_data     = (char *)lv_event_get_user_data(e);

    if(code == LV_EVENT_CLICKED || code == LV_EVENT_FOCUSED) {
        if(kb != NULL) {
            lv_keyboard_set_textarea(kb, ta); // 关联键盘到输入框
        }
    } else if(code == LV_EVENT_READY) {
        const char * text = lv_textarea_get_text(ta);
        // 保存输入的账号/密码
        if(strcmp(user_data, "account") == 0) {
            strncpy(account, text, sizeof(account) - 1);
            account[sizeof(account) - 1] = '\0';
        } else if(strcmp(user_data, "password") == 0) {
            strncpy(password, text, sizeof(password) - 1);
            password[sizeof(password) - 1] = '\0';
        }
    }
}

/**
 * 登录按钮事件回调（完善登录逻辑）
 */
static void login_event_cb(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_CLICKED) {

        show_main_win(); // 登录成功之后切换到主功能界面
        // 1. 空值校验
        // if (strlen(account) == 0 || strlen(password) == 0) {
        //     lv_label_set_text(tip_label, "提示：账号或密码不能为空");
        //     return;
        // }

        // // 2. 检查账号是否注册（未注册则无法登录）
        // if (!is_account_registered(account)) {
        //     lv_label_set_text(tip_label, "登录失败：账号未注册，请先注册");

        //     return;
        // }

        // // 3. 验证账号密码是否匹配
        // if (verify_login(account, password)) {
        //     lv_label_set_text(tip_label, "登录成功，正在跳转...");
        //     // 延迟1秒后跳转主页面（给用户看提示）
        //     lv_timer_create((lv_timer_cb_t)go_to_main_page, 1000, NULL);
        // } else {
        //     lv_label_set_text(tip_label, "登录失败：密码错误");
        // }
    }
}

/**
 * 注册按钮事件回调（完善注册逻辑）
 */
static void register_event_cb(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_CLICKED) {
        // 1. 空值校验
        if(strlen(account) == 0 || strlen(password) == 0) {
            lv_label_set_text(tip_label, "提示：账号或密码不能为空");
            return;
        }

        // 2. 账号长度校验（至少3位）
        if(strlen(account) < 3) {
            lv_label_set_text(tip_label, "注册失败:账号至少3个字符");
            return;
        }

        // 3. 密码长度校验（至少6位）
        if(strlen(password) < 6) {
            lv_label_set_text(tip_label, "注册失败：密码至少6个字符");
            return;
        }

        // 4. 检查账号是否已注册
        if(is_account_registered(account)) {
            lv_label_set_text(tip_label, "注册失败：账号已被注册");
            return;
        }

        // 5. 检查数据库是否已满
        if(user_count >= MAX_USERS) {
            lv_label_set_text(tip_label, "注册失败：用户数量已达上限");
            return;
        }

        // 6. 注册成功：保存到数据库
        strncpy(user_db[user_count].account, account, sizeof(user_db[user_count].account) - 1);
        strncpy(user_db[user_count].password, password, sizeof(user_db[user_count].password) - 1);
        user_count++; // 用户数+1

        lv_label_set_text(tip_label, "注册成功！请登录");
        // 清空输入框（优化体验）
        lv_textarea_set_text(lv_obj_get_child(lv_scr_act(), 2), ""); // 账号输入框（索引需根据实际调整）
        lv_textarea_set_text(lv_obj_get_child(lv_scr_act(), 4), ""); // 密码输入框
    }
}

/**
 * 创建登录/注册界面
 */
void btn_wind(void)
{
    /* 创建提示标签 */
    tip_label = lv_label_create(lv_scr_act());
    lv_obj_set_style_text_font(tip_label, &chinese_ziku, 0);
    lv_obj_align(tip_label, LV_ALIGN_BOTTOM_MID, 0, -50);

    /* 创建账号输入框 */
    lv_obj_t * account_ta = lv_textarea_create(lv_scr_act());
    lv_textarea_set_one_line(account_ta, true);
    lv_textarea_set_password_mode(account_ta, false);
    lv_obj_set_width(account_ta, lv_pct(40));
    lv_obj_align(account_ta, LV_ALIGN_TOP_RIGHT, -240, 100);
    lv_obj_add_event_cb(account_ta, ta_event_cb, LV_EVENT_ALL, (void *)"account");

    /* 账号标签 */
    lv_obj_t * account_label = lv_label_create(lv_scr_act());
    lv_label_set_text(account_label, "账号:");
    lv_obj_set_style_text_font(account_label, &chinese_ziku, 0);
    lv_obj_align_to(account_label, account_ta, LV_ALIGN_OUT_TOP_LEFT, 0, 0);

    /* 创建密码输入框 */
    lv_obj_t * pwd_ta = lv_textarea_create(lv_scr_act());
    lv_textarea_set_text(pwd_ta, "");
    lv_textarea_set_password_mode(pwd_ta, true);
    lv_textarea_set_one_line(pwd_ta, true);
    lv_obj_set_width(pwd_ta, lv_pct(40));
    lv_obj_set_pos(pwd_ta, 240, 200);
    lv_obj_add_event_cb(pwd_ta, ta_event_cb, LV_EVENT_ALL, (void *)"password");

    /* 密码标签 */
    lv_obj_t * pwd_label = lv_label_create(lv_scr_act());
    lv_label_set_text(pwd_label, "密码:");
    lv_obj_set_style_text_font(pwd_label, &chinese_ziku, 0);
    lv_obj_align_to(pwd_label, pwd_ta, LV_ALIGN_OUT_TOP_LEFT, 0, 0);

    /* 登录按钮 */
    login_btn = lv_btn_create(lv_scr_act());
    lv_obj_set_size(login_btn, 100, 40);
    lv_obj_align_to(login_btn, pwd_ta, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 20);
    lv_obj_add_event_cb(login_btn, login_event_cb, LV_EVENT_CLICKED, NULL);

    lv_obj_t * login_label = lv_label_create(login_btn);
    lv_label_set_text(login_label, "登录");
    lv_obj_set_style_text_font(login_label, &chinese_ziku, 0);
    lv_obj_center(login_label);

    /* 注册按钮 */
    register_btn = lv_btn_create(lv_scr_act());
    lv_obj_set_size(register_btn, 100, 40);
    lv_obj_align_to(register_btn, pwd_ta, LV_ALIGN_OUT_BOTTOM_RIGHT, 0, 20);
    lv_obj_add_event_cb(register_btn, register_event_cb, LV_EVENT_CLICKED, NULL);

    lv_obj_t * register_label = lv_label_create(register_btn);
    lv_label_set_text(register_label, "注册");
    lv_obj_set_style_text_font(register_label, &chinese_ziku, 0);
    lv_obj_center(register_label);

    /* 创建虚拟键盘 */
    kb = lv_keyboard_create(lv_scr_act());
    lv_obj_set_size(kb, LV_HOR_RES / 2, LV_VER_RES / 3);
    lv_keyboard_set_textarea(kb, pwd_ta);
}

// 获取账号和密码（外部接口）
static const char * get_account(void)
{
    return account;
}
static const char * get_password(void)
{
    return password;
}